<?php
// 案例一： 通过不同的短信服务商发送短信
class MsgTT {
	public $toMobile = '';
	public $templateId = '';
	public $templateData = [];

	public function __construct($toMobile, $templateId, $templateData)
	{
		$this->toMobile = $toMobile;
		$this->templateId = $templateId;
		$this->templateData = $templateData;
	}

	public function push()
	{
		return sprintf('这里是`tt`短信服务商，你正在给手机号为`%s`的用户发送短信，使用固定内容模板ID：`%s`，内容参数为：%s；', $this->toMobile, $this->templateId, json_encode($this->templateData??[], JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE));
	}
}
class MsgJG {
	public function push(string $fromUid, string $toMobile, string $text, string $code = '+86')
	{
		return sprintf('通过`JG`服务商，由`%s`向手机用户`%s %s`发送内容为`%s`的短信；', $fromUid, $code, $toMobile, $text);
	}
}

class PushMsgFactory
{
	public static function __callStatic($name, $arguments)
	{
		switch ($name) {
			case 'tt':
				return new MsgTT($arguments[0]['toMobile'], $arguments[0]['templateId'], $arguments[0]['templateData']);
				break;
			case 'jg':
				return new MsgJG();
				break;
			default:
				throw new Exception("未识别的发送渠道", 1);
				break;
		}
	}
}

/**
 * 使用
 * */

// 使用`tt`短信服务商发送短信
$ttRes = PushMsgFactory::tt([
	'toMobile' => '13103010001',
	'templateId' => '666',
	'templateData' => [
		':num'  => '2',
		':code' => '434893',
	],
])->push();

// 使用`jg`短信服务商发送短信
$jgRes = PushMsgFactory::jg()->push('jg_uid_0001', 'jg_cust_666', '13103010001', '发送的短信内容哇，验证码：888666');

var_dump([
	'tt服务商发送结果' => $ttRes,
	'jg服务商发送结果' => $jgRes,
]);

